package com.schooleducation.dao;

import java.util.List;

/**
 * dao层，用户订阅课程
 * 
 * @author weijing
 *
 * @param <T>
 *            泛型，指定实体类 type
 * @param <PK>
 *            泛型，指定实体类主键的数据类型，如 Integer,Long
 */
public interface LessonSubscribeDao<T, PK> extends GenericDao<T, PK> {

	/**
	 * 根据用户查询订阅的课程列表
	 * 
	 * @param entity
	 *            实例
	 * @param start
	 *            开始
	 * @param limit
	 *            数据条数
	 * @return 结果集
	 */
	public List<T> getSubscribeLessonByUser(T entity, int start, int limit);

	/**
	 * 查询指定课程的订阅课程列表
	 * 
	 * @param entity
	 *            实例
	 * @param start
	 *            开始
	 * @param limit
	 *            数据条数
	 * @return 结果集
	 */
	public List<T> getSubscribeLessonByLesson(T entity, int start, int limit);

	/**
	 * 获取用户订阅课程的数量
	 * 
	 * @param entity
	 *            实体类
	 * @return 数量
	 */
	public Long getCountByLessonAndUser(T entity);

	/**
	 * 获取用户订阅课程不同审核状态下的数量
	 * 
	 * @param entity
	 *            实体类
	 * @return 数量
	 */
	public Long getCountStateByLessonAndUser(T entity);

	/**
	 * 获取单门课程的数量
	 * 
	 * @param entity
	 *            实体类
	 * @return 数量
	 */
	public Long getLessonCount(T entity);

	/**
	 * 获取当前用户和课程的订阅信息
	 * 
	 * @param entity
	 *            实例
	 * @return 结果
	 */
	public T getSubscribeByLessonAndUser(T entity);
}
